package com.ruoyi.system.dto;

import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 施工阶段新增DTO（仅用于自定义阶段创建，固定阶段不可新增）
 * 对应需求：施工阶段配置-自定义阶段创建（支持设计师创建专属阶段）
 */
@Data
public class StageAddDTO {

    /**
     * 阶段名称（自定义阶段核心标识）
     * 需求约束：
     * 1. 不能为空，且长度1-50字符（避免过长影响列表展示）
     * 2. 不可与系统固定阶段（如“水电布线”“泥瓦施工”）重复
     * 3. 不可与当前设计师已创建的自定义阶段重复
     */
    @NotBlank(message = "阶段名称不能为空")
    @Size(min = 1, max = 50, message = "阶段名称长度需在1-50字符之间")
    private String stageName;

    /**
     * 是否必选（关联项目时的强制选择配置）
     * 需求约束：
     * 1. 仅支持0（非必选）、1（必选）两个值
     * 2. 必选阶段在项目创建时必须勾选，不可跳过
     * 3. 非必选阶段可根据项目需求灵活选择
     */
    @Range(min = 0, max = 1, message = "是否必选仅支持0（非必选）、1（必选）")
    private Integer isRequired;

    /**
     * 排序号（阶段列表展示顺序控制）
     * 需求约束：
     * 1. 取值范围1-999（避免排序号过大导致逻辑异常）
     * 2. 数值越小，在阶段列表中排序越靠前
     * 3. 支持后续通过“阶段排序”功能修改
     */
    @Range(min = 1, max = 999, message = "排序号需在1-999之间（数值越小排序越靠前）")
    private Integer sortNum;

    /**
     * 阶段状态（新增时默认启用，支持手动设置停用）
     * 需求约束：
     * 1. 仅支持1（启用）、2（停用）两个值
     * 2. 启用状态的阶段可关联到项目，停用状态不可关联
     * 3. 新增时若不传递，默认设为1（启用）
     */
    @Range(min = 1, max = 2, message = "阶段状态仅支持1（启用）、2（停用）")
    private Integer stageStatus;

    /**
     * 备注（阶段补充说明，非必填）
     * 需求约束：
     * 1. 用于记录阶段的特殊说明（如“仅用于别墅项目的墙体改造”）
     * 2. 最大长度500字符（避免内容过长影响存储和展示）
     */
    @Size(max = 500, message = "备注最大长度为500字符")
    private String remark;
}